package com.cskaoyan.javase.basic._6operation;

/**
 * 三目运算符
 * 三目（ternary）运算符，也被称之为三元运算符，即指的是需要三个操作数的运算符。
 *
 * 它的语法是：
 * (条件表达式) ? 表达式1 : 表达式2;
 *
 * 条件表达式,结果是布尔类型的表达式,只有两种结果true或者false
 * 三目运算符组成的表达式中,如果条件表达式的结果是true,那么执行表达式1
 * 否则执行表达式2
 *
 * 所以三目运算符是一个做选择运算的运算符
 * 三目运算符的最大特点是一定会执行一个表达式,一定会给出一个结果,这个结果需要接收或者直接sout输出.
 *
 * 与此同时,三目运算符最大的问题也是它一定给出一个结果
 * 这导致三目运算符适用的场景很少,不多
 *
 * 和三目运算符作用完全一致,并且使用场景更广泛的就是
 * if...else
 * 它不受表达式的限制,可以写表达式,也可以写语句
 *
 * 三目运算符 vs if...else
 * 三目运算符的优点是:
 *      1.从代码上讲更简洁,简洁优雅
 *      2.三目运算符的执行效率会稍微更高一点(影响不大)
 * 缺点是: 泛用性差
 *
 * 结论: 能用三目运算符就用三目运算符(这种场景不多见)
 * if...else怎么都可以用
 *
 *
 * @since 15:10
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 求两个数的最大值
        int num1 = 100;
        int num2 = 200;
        // .sout .soutv
        System.out.println((num1 > num2) ? num1 : num2);
        int max = (num1 > num2) ? num1 : num2;
        System.out.println(max);


        // 求两个数的最大值,但是要求直接控制台打印最大值
        // sout是输出语句,语句往往是没有结果的,sout语句就没有结果,所以sout就不能在三目运算符中使用
        // (num1 > num2) ? sout : sout;

        if (num1 > num2) {
            System.out.println(num1);
        } else {
            System.out.println(num2);
        }

        // 求三个数的最大值
        int num3 = 300;
        // 代码更简洁更优雅,但是可读性不好,小括号还可以用于提升代码的可读性
        int result2 = (num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3);
        System.out.println(result2);
    }
}
